package com.yibai.web;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;

public class MyBatisPulsCode {

     public static void main(String[] args) {
// 需要构建一个 代码自动生成器 对象
          AutoGenerator mpg = new AutoGenerator();

// 配置策略
// 1、全局配置

          GlobalConfig gc = new GlobalConfig();
          String projectPath = System.getProperty("user.dir");
          gc.setOutputDir(projectPath+"/src/main/java");
          gc.setAuthor("fang");
          gc.setOpen(false);
          gc.setFileOverride(false); // 是否覆盖
          gc.setServiceName("%sService"); // 去Service的I前缀
          gc.setIdType(IdType.ID_WORKER);
          gc.setDateType(DateType.ONLY_DATE);
          gc.setSwagger2(true);
          mpg.setGlobalConfig(gc);

//2、设置数据源

          DataSourceConfig dsc = new DataSourceConfig();
          dsc.setUrl("jdbc:mysql://rm-8vbn7y8nezwvp5bw3xo.mysql.zhangbei.rds.aliyuncs.com/yibai?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
          dsc.setDriverName("com.mysql.jdbc.Driver");
          dsc.setUsername("fangzehua");
          dsc.setPassword("fangzehua");
          dsc.setDbType(DbType.MYSQL);
          mpg.setDataSource(dsc);

//3、包的配置

          PackageConfig pc = new PackageConfig();
          pc.setModuleName("app");
          pc.setParent("com.yibai.web.yibai");
          pc.setEntity("entity");
          pc.setMapper("mapper");
          pc.setService("service");
          pc.setController("controller");
          mpg.setPackageInfo(pc);

//4、策略配置

          StrategyConfig strategy = new StrategyConfig();
          strategy.setInclude("t_biz_article","t_biz_article_img","t_biz_banner","t_biz_category"); // 设置要映射的表名
          strategy.setNaming(NamingStrategy.underline_to_camel);
          strategy.setTablePrefix(new String[] { "t_biz"});
          strategy.setColumnNaming(NamingStrategy.underline_to_camel);
          strategy.setEntityLombokModel(true); // 自动lombok；
          strategy.setLogicDeleteFieldName("deleted");

// 自动填充配置

          TableFill gmtCreate = new TableFill("create_time", FieldFill.INSERT);
          TableFill gmtModified = new TableFill("modify_time", FieldFill.INSERT_UPDATE);
          ArrayList<TableFill> tableFills = new ArrayList<>();
          tableFills.add(gmtCreate);
          tableFills.add(gmtModified);
          strategy.setTableFillList(tableFills);

// 乐观锁

          strategy.setVersionFieldName("version");
          strategy.setRestControllerStyle(true);
          strategy.setControllerMappingHyphenStyle(true);
          mpg.setStrategy(strategy);
          mpg.execute(); //执行
     }

}